package com.symbio.ishenapi.common.controller;

import com.jfinal.aop.Before;
import com.jfinal.json.FastJson;
import com.jfinal.kit.HttpKit;
import com.jfinal.kit.StrKit;
import com.jfinal.upload.UploadFile;
import com.symbio.ishenapi.common.bean.JsonPageRet;
import com.symbio.ishenapi.common.bean.JsonRet;
import com.symbio.ishenapi.common.bean.LoginUser;
import com.symbio.ishenapi.common.bean.QueryModel;
import com.symbio.ishenapi.common.interceptor.GlobalInterceptor;
import com.symbio.ishenapi.common.kit.ISConst;

import io.jboot.Jboot;
import io.jboot.component.redis.JbootRedis;
import io.jboot.web.controller.JbootController;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 基础Controller
 */
@Before(GlobalInterceptor.class)
public class BaseController extends JbootController {

	/**
	 * 从Request Body中取出对象
	 * 
	 * @param clazz
	 * @return
	 */
	public Object getReqBodyObject(Class<?> clazz) {
		String json = getReqBodyString();
		if (StrKit.isBlank(json)) {
			try {
				return clazz.newInstance();
			} catch (Exception e) {
				return null;
			}
		}
		return FastJson.getJson().parse(json, clazz);
	}

	/**
	 * 从Request Body中取出字符串
	 * 
	 * @return
	 */
	public String getReqBodyString() {
		return HttpKit.readData(getRequest());
	}
	
	/**
	 * 返回JSON对象
	 * 
	 * @param ret
	 */
	public void renderJsonRet(Object ret) {
		renderJson(new JsonRet(ret));
	}
	
	/**
	 * 返回JSON对象
	 * 
	 * @param code,args
	 */
	public void renderJsonError(int code, Object... args) {
		renderJson(new JsonRet(code, args));
	}

	/**
	 *
	 * @param count 数据总条数
	 * @param data  数据结果集
	 */
	public void renderPageJsonRet(Object count,Object data){
		renderJson(new JsonPageRet(0,count,data));
	}
	
	/**
	 * 获取当前登录用户
	 * 
	 * @return
	 */
	public LoginUser getLoginUser() {
		LoginUser loginUser = new LoginUser();
		String token = getHeader("X-Token");
		if(token != null){
			JbootRedis redis = Jboot.me().getRedis();
			loginUser = (LoginUser)redis.get(token);
		}
		return loginUser;
	}

	/**
	 * 获取查询分页参数
	 * @return
	 */
	public QueryModel getQueryModel(){
		QueryModel queryModel = new QueryModel();
		int page = getParaToInt("page");
		int limit = getParaToInt("limit");
		//因为前台layui传来的分页参数 默认是1开始，用的是Mysql数据库，要计算起始页  （页数-1）*条数
		queryModel.setPage((page-1)*limit);
		queryModel.setLimit(limit);
		return queryModel;
	}

	/**
	 * 获取前台传来的上传文件
	 * @return
	 */
	public File getParamFile(){
		UploadFile file = getFile();
		File delfile = new File(file.getUploadPath()+"\\"+file.getFileName());
		return delfile;
	}

	/**
	 * 获取前台传来的多图片
	 * @return
	 */
	public List<File> getParamFiles(){
		List<File> list =new ArrayList<>();
		List<UploadFile> files = getFiles();
		for(int i=0;i<files.size();i++){
			File delfile = new File(files.get(i).getUploadPath()+"\\"+files.get(i).getFileName());
			list.add(delfile);
		}
		return list;
	}
}
